package org.jshand.homework.api;

import com.neuedu.utils.InputUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author 金山
 * 项目：javase
 * site: https://blog.fulfill.com.cn
 * 描述
 * @data 2024/10/258:34
 */
public class ApiTest {

    public static void main(String[] args) {


        // test1();
        // test2();
        // test3();
        // test4();

        // test5();
        // test6();

        // test7();


        // test8();

        test9();



    }

    /**
     * 做一个学生类，其中包括属性学号id，学生姓名sname，年龄sage(String类型)，在类中写一个方法来实现年龄自动增加的功能(原年龄上加1)，并测试该功能方法
     */
    private static void test9() {
        Student st = new Student("0001","张三","15");

        st.incrementAge();
        System.out.println(st);

        st.incrementAge();
        System.out.println(st);

        st.incrementAge();
        System.out.println(st);
    }

    /**
     * 做一个学生类Student，其中包括属性学号id，学生姓名sname，
     * 在类中重写一个equals方法来根据学号和姓名来判断两个学生的是不是同一个学生，并测试该功能方法
     */
    private static void test8() {


        Student student1 = new Student("1001","张三");
        Student student2 = new Student("1001","张三");
        Student student3 = new Student("1002","李四");


        System.out.println("student1.equals(student2) = " + student1.equals(student2));
        System.out.println("student1.equals(student3) = " + student1.equals(student3));

    }

    /**
     * 输入一个时间字符串"xxxx-xx-xx" 显示出对应的XXXX年XX月XX日
     */
    private static void test7() {
        String str = InputUtils.getString("输入一个时间字符串xxxx-xx-xx");
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日");


        try {
            Date date = sdf1.parse(str);

            String format = sdf2.format(date);
            System.out.println("转换格式之后的日期： "+format);

        } catch (ParseException e) {
            System.out.println("输入的日期格式不对");
            test7();
        }
    }


    /**
     * 输入一行字符，将其中的字母变成其后续的第3个字母，输出。例：a→d，x　→　a；y　→　b；编程实现。
     */
    private static void test6() {

        String str = InputUtils.getString("请输入一行字符");
        StringBuffer stringBuffer = new StringBuffer(str.length());
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            switch (c){
                case 'x':
                    stringBuffer.append('a');
                    break;
                case 'y':
                    stringBuffer.append('b');
                    break;
                case 'z':
                    stringBuffer.append('c');
                    break;
                default:
                    stringBuffer.append((char)(c+3));
            }
        }
        System.out.println("转换之后的字符:"+stringBuffer.toString());
    }


    /**
     * 请编程实现：由键盘输入的任意一组字符，统计其中大写字母的个数m和小写字母的个数n，并输出m、n中的较大者。
     *
     * A-Z
     * 65--90
     *
     * a - z
     * 97--122
     *
     */
    private static void test5() {

        // System.out.println("'a' = " + ((int)'a'));
        // System.out.println("'b' = " + ((int)'b'));
        // System.out.println("'y' = " + ((int)'y'));
        // System.out.println("'z' = " + ((int)'z'));
        // System.out.println("'A' = " + ((int)'A'));
        // System.out.println("'B' = " + ((int)'B'));
        // System.out.println("'Y' = " + ((int)'Y'));
        // System.out.println("'Z' = " + ((int)'Z'));
        String str =  InputUtils.getString("请输入一堆字符包含大写小写");
        int bigCount = 0;
        int smallCount = 0;

        //GFsaIUSDpoiuzahsPOIUSD
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);


            // Character.isLowerCase(c)
            if( Character.isLowerCase(c) ){
                smallCount++;
            }else if ( Character.isUpperCase(c)){
                bigCount++;
            }

            // if(c >= 'a' && c<='z'){
            //     smallCount++;
            // }
            // else if(c >= 'A' && c<='Z'){
            //     bigCount++;
            // }
        }

        System.out.printf("大写字符的个数是 %d  ,小写字符的个数是：%d",bigCount,smallCount);



    }


    public static void test4(){
        String strDate = "2006-12/12";

        boolean validated  = validateDate(strDate);
        System.out.println("validated = " + validated);
    }
    /**
     * 编写一个方法验证用户输入的日期格式是否正确，要求格式为：2006/12/12。方法的参数是要验证的日期字符串，如果格式正确返回true，否则返回false。
     */
    private static boolean validateDate(String str) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        boolean isValid = false;


        try {
            sdf.parse(str);
            isValid = true;
        } catch (ParseException e) {   }


        return isValid;
    }


    /**
     * 巴黎时间比北京时间晚7个小时，纽约时间比北京时间晚12个小时，试编写一程序，根据输入的北京时间输出相应的巴黎和纽约时间。
     */
    private static void test3() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strDate = InputUtils.getString("请输入一个北京时间(yyyy-MM-dd HH:mm:ss)");


        try {
            //1 从字符串 转换成  Date
            Date dateOfBeijing =sdf.parse(strDate);

            //1 从Date 转换成 Calendar
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(dateOfBeijing);


            calendar.add(Calendar.HOUR_OF_DAY,-7);
            //输出字符串值表示的巴黎时间
            System.out.printf("巴黎对应的时间是 :%s\r\n",sdf.format(calendar.getTime()));


            calendar.add(Calendar.HOUR_OF_DAY,-5);
            System.out.printf("纽约对应的时间是 :%s\r\n",sdf.format(calendar.getTime()));




        } catch (ParseException e) {
            System.out.println("您输入的日期不正确");
            test3();
        }


    }

    /**
     * 编写一个程序，实现从命令行参数输入两个字符串类型的数值，并计算输出两个数值的和。
     */
    public static void test1(){
        String num1 = InputUtils.getString("请输入一个数字");
        String num2 = InputUtils.getString("请再次输入一个数字");

        int intValue1 = Integer.parseInt(num1);
        int intValue2 = Integer.parseInt(num2);

        System.out.println("两个数的加和: " + (intValue1 + intValue2));
    }


    /**
     * 编写一个程序，实现从命令行参数输入一字符串，统计该字符串中字符“e”出现的次数。
     */
    public static void test2(){
        int count = 0;
        String str = InputUtils.getString("请输入一段英文字符");
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if(c == 'e'){
                count++;
            }
        }
        System.out.printf("字母e出现的次数 =%d\r\n",count);

    }

}
